#include "backgroundthread.h"
#include "utils.h"
#include <QJsonArray>
#include <QSqlDatabase>
#include <QSqlQuery>
#include <QSqlError>

BackgroundThread::BackgroundThread(int id) : QObject(),Id(id)
{

}


void BackgroundThread::slot_thread_mod_finish(ReqId id, QByteArray res, ErrorCodes err, QString fileName)
{
    if(err == ErrorCodes::ERR_NETWORK){
        qDebug() << id << "模块请求发送错误";
        return;
    }

    if( id == ReqId::ID_LOGIN_GETAVATAR ){
        //保存图片到本地
        saveBytesFile(AVATAR_PATH, fileName, res);
        //NEEDLoadAvatarNums == -1不做处理 0通知主线程显示聊天界面 大于0则继续迭代
        if(NEEDLoadAvatarNums == -1)
            return;
        NEEDLoadAvatarNums--;
        if(NEEDLoadAvatarNums == 0){
            emit sig_finishAvatrLoad();//通知主线程显示聊天界面
            return;
        }
        return;
    }
    else if( id == ReqId::ID_CHAT_GETIAMGEMsg ){
        saveBytesFile(IMAGE_MSG_PATH,fileName,res);
        return;
    }
    else if( id == ReqId::ID_LOGIN_MESSAGES ){
        // 将 QByteArray 解析为 QJsonDocument
        QJsonDocument jsonDoc = QJsonDocument::fromJson(res);
        // 检查解析是否成功,
        if (jsonDoc.isNull()) {
            //qDebug() << "该msgId没有数据" ;
            return ;
        }
        // 检查是否为 JSON 对象
        if (!jsonDoc.isObject()) {
            qDebug() << "The JSON data is not a valid JSON object: "
                        "BackgroundThread::slot_thread_mod_finish" ;
            return ;
        }

        // 获取 QJsonObject
        QJsonObject jsonObj = jsonDoc.object();
        QString msgId = jsonObj["MsgId"].toString();
        QJsonArray msgDataArray = jsonObj["MsgData"].toArray();


        int newMesNums = 0;//获取消息列表中新消息个数
        for(auto itemArr:msgDataArray){
            QJsonObject itemObj = itemArr.toObject();
            QString mesitem = itemObj["message"].toString();
            QJsonDocument mesDoc = QJsonDocument::fromJson(mesitem.toUtf8());
            QJsonObject mesObj = mesDoc.object();
            //将消息储存到本地sqlite数据库
            saveMessageToDatabase(BACKTHREAD,msgId,mesObj["TargetId"].toInt(),mesObj["Type"].toInt(),
                mesObj["Media"].toInt(),mesObj["Content"].toString(),mesObj["CreateTime"].toDouble(),
                 mesObj["ReadTime"].toDouble(),itemObj["score"].toDouble());
            //如果读取时间为0，新消息加1
            if(mesObj["ReadTime"].toDouble() == 0)
                newMesNums++;
            if(mesObj["Media"].toInt() == 4){
                emit sig_iamgeMsg(mesObj["Content"].toString());//通知主线程发送图片资源请求
            }
        }

        QJsonObject lastItemObj = msgDataArray[msgDataArray.size()-1].toObject();
        QString messageStr = lastItemObj["message"].toString();
        // 解析 message 字段中的 JSON 字符串
        QJsonDocument messageDoc = QJsonDocument::fromJson(messageStr.toUtf8());
        QJsonObject messageObj = messageDoc.object();
        //如果最后一天消息为时间，则读取上一条消息
        if(messageObj["Type"].toInt() == 4){
            QJsonObject lastItemObj1 = msgDataArray[msgDataArray.size()-2].toObject();
            QString messageStr1 = lastItemObj1["message"].toString();
            // 解析 message 字段中的 JSON 字符串
            QJsonDocument messageDoc1 = QJsonDocument::fromJson(messageStr1.toUtf8());
            QJsonObject messageObj1 = messageDoc1.object();
            emit sig_lastMsg(lastItemObj1,msgId,newMesNums);//通知主线程加载聊天item
            qDebug() << lastItemObj1;
            return;
        }
        emit sig_lastMsg(lastItemObj,msgId,newMesNums);//通知主线程加载聊天item
        //qDebug() << lastItemObj;




    }
}



// 插入数据到表中
void insertData(const QString& name, int age) {
    QSqlQuery query;
    // 准备插入数据的SQL语句
    query.prepare("INSERT INTO users (name, age) VALUES (:name, :age)");
    // 绑定参数
    query.bindValue(":name", name);
    query.bindValue(":age", age);

    // 执行插入操作
    if (!query.exec()) {
        qDebug() << "插入数据失败:" << query.lastError().text();
                                             return;
    }

    return;
}
